package com.rc.saas.tenant.interceptor.parser;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * Spring上下文环境工具
 * Created by sven on 2019/4/29
 */
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
    private static ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
        return context;
    }

    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    /**
     * 服务器启动，Spring容器初始化时，当加载了当前类为bean组件后，
     * 将会调用下面方法注入ApplicationContext实例
     */
    //@Override
    //public void setApplicationContext(ApplicationContext ac) throws BeansException {
    //    SpringApplicationContextUtil.ac = ac;
    //     System.out.println("将Spring应用上下文注入到" + SpringApplicationContextUtil.class.getName());
    //}
    //
    //public static ApplicationContext getApplicationContext() {
    //    return ac;
    //}
    //
    //public static <T> T getBean(String beanName) {
    //    return (T) ac.getBean(beanName);
    //}
    //
    //public static <T> T getBean(Class<T> c) {
    //    return (T) ac.getBean(c);
    //}
    //
    //public static <T> T getBean(String beanName, Class<T> c) {
    //    return (T) ac.getBean(beanName, c);
    //}
    //
    ///**
    // * 如果BeanFactory包含一个与所给名称匹配的bean定义，则返回true
    // * @param name
    // * @return
    // */
    //public static boolean containsBean(String name) {
    //    return ac.containsBean(name);
    //}
    //
    ///**
    // * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
    // * 如果与给定名字相应的bean定义没有被找到，将会抛出一个异常（NoSuchBeanDefinitionException）
    // * @param name
    // * @return
    // * @throws NoSuchBeanDefinitionException
    // */
    //public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
    //    return ac.isSingleton(name);
    //}
    //
    ///**
    // *
    // * @param name
    // * @return
    // * @throws NoSuchBeanDefinitionException
    // */
    //public static Class getType(String name) throws NoSuchBeanDefinitionException {
    //    return ac.getType(name);
    //}
    //
    ///**
    // * 如果给定的bean名字在bean定义中有别名，则返回这些别名
    // * @param name
    // * @return
    // * @throws NoSuchBeanDefinitionException
    // */
    //public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
    //    return ac.getAliases(name);
    //}
}
